#ifndef __DTK_VALUE_H__
#define __DTK_VALUE_H__

#include "dtk_types.h"

typedef struct __dtk_value__
{
    D_VALUE_TYPE    type;
    union   {
        DInt8       v_int8;
        DUInt8      v_uint8;
        DInt16      v_int16;
        DUInt16     v_uint16;
        DInt        v_int;
        DUInt       v_uint;
        DLong       v_long;
        DULong      v_ulong;
        DInt64      v_int64;
        DUInt64     v_uint64;
        DFloat      v_float;
        DDouble     v_double;
        DPointer    v_pointer;
        DString     v_string;
        DColor      v_color;
    }data[2];
}DValue;

DValue* dtk_value_init (DValue* value, DInt type);
DInt8 dtk_value_get_int8(DValue* value);
DUInt8 dtk_value_get_uint8(DValue* value);
DInt16 dtk_value_get_int16(DValue* value);
DUInt16 dtk_value_get_uint16(DValue* value);
DInt dtk_value_get_int(DValue* value);
DUInt dtk_value_get_uint(DValue* value);
DLong dtk_value_get_long(DValue* value);
DULong dtk_value_get_ulong(DValue* value);
DInt64 dtk_value_get_int64(DValue* value);
DUInt64 dtk_value_get_uint64(DValue* value);
DFloat dtk_value_get_float(DValue* value);
DDouble dtk_value_get_double(DValue* value);
DPointer dtk_value_get_pointer(DValue* value);
DString dtk_value_get_string(DValue* value);
DColor dtk_value_get_color(DValue* value);
void dtk_value_set_int8(DValue* value, DInt8 data);
void dtk_value_set_uint8(DValue* value, DUInt8 data);
void dtk_value_set_int16(DValue* value, DInt16 data);
void dtk_value_set_uint16(DValue* value, DUInt16 data);
void dtk_value_set_int(DValue* value, DInt data);
void dtk_value_set_uint(DValue* value, DUInt data);
void dtk_value_set_long(DValue* value, DLong data);
void dtk_value_set_ulong(DValue* value, DULong data);
void dtk_value_set_int64(DValue* value, DInt64 data);
void dtk_value_set_uint64(DValue* value, DInt64 data);
void dtk_value_set_float(DValue* value, DFloat data);
void dtk_value_set_double(DValue* value, DDouble data);
void dtk_value_set_pointer(DValue* value, DPointer data);
void dtk_value_set_string(DValue* value, DString data);
void dtk_value_set_color(DValue* value, DColor* color);
#endif
